﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

namespace MessengerBot
{
    /// <summary>
    /// This interface must be implemented by classes that implement bot sub-systems,
    /// that expose commands to the user.
    /// </summary>
    public interface ICommandBasedSystem : ISystem
    {
        /// <summary>
        /// Retrieve all the <see cref="Type"/> objects for the commands implemented by the system.
        /// Each has to be tagged with an appropriate <see cref="CommandAttribute"/>.
        /// </summary>
        /// <returns>
        /// A collection of types implementing <see cref="ICommand"/>.
        /// </returns>
        IEnumerable<Type> GetCommands();
    }
}